package com.example.server.advice;

import com.example.common.exception.YebException;
import com.example.common.vo.RespBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * Advice 通知、增强，拦截所有未处理的异常，并且交给该组件进行处理
 *
 * 定义不同的方法来处理不同的异常
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionAdvice {

//    private final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionAdvice.class);

    /**
     * 只要出现该异常，就会被该方法拦截到，进行处理
     */
    @ExceptionHandler(ArithmeticException.class)
    public RespBean arithmeticExceptionHandler(ArithmeticException exception) {

        // 打印日志
        log.error("算术异常，" + exception.getMessage(), exception);
        // 将异常格式化并且发送给客户端
        return RespBean.error(201, "算术异常，" + exception.getMessage());
    }

    @ExceptionHandler(YebException.class)
    public RespBean yebExceptionHandler(YebException exception) {

        log.error(exception.getCode() + " :" + exception.getMsg(), exception);

        return RespBean.error(exception.getCode(), exception.getMsg());
    }
}
